Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サービス成長と共に肥大化するモノレポ、長くなるCI時間 / As services grow,...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kohbis
March 22, 2024
Technology
3.3k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サービス成長と共に肥大化するモノレポ、長くなるCI時間 / As services grow, monorepos get bigger and CI time gets longer
SRE観点での技術負債 懺悔会 2024
https://mixi.connpass.com/event/312191/
kohbis
March 22, 2024
More Decks by kohbis
See All by kohbis
『家族アルバム みてね』における インシデント対応との向き合い方 / Approach incident response in Family Album
kohbis
2
370
Kubernetes環境周りの責任範囲をいい機会なので考える / Taking the Opportunity to Clarify Kubernetes Responsibilities
kohbis
2
430
『家族アルバム みてね』におけるAmazon EKSコストとの向き合い方 / Optimizing Amazon EKS Costs: The FamilyAlbum Case
kohbis
4
1.7k
潜在的課題探索活動の近況報告 / Exploration of latent challenges
kohbis
2
180
いま、あらためて考えてみるアカウント管理 with IaC / Account management with IaC
kohbis
3
1.1k
〜『世界中の家族のこころのインフラ』を目指して”次の10年”へ〜 SREが導いたグローバルサービスの信頼性向上戦略とその舞台裏 / Towards the Next Decade: Enhancing Global Service Reliability
kohbis
4
7.1k
Grafana MCP serverでなんかし隊 / Try Grafana MCP server
kohbis
0
1k
Custom Prometheus Exporterによる オブザーバビリティ拡張 / Extending observability with Custom Prometheus Exporter
kohbis
1
300
データベースで見る『家族アルバム みてね』の変遷 / The Evolution of Family Album Through the Lens of Databases
kohbis
5
1.6k
Other Decks in Technology
See All in Technology
文字起こし基盤の信頼性
abnoumaru
0
150
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
4
1.5k
テックカンファレンス三大ステークホルダーの文化人類学 ─ 違いを認め合う関係性作り
bash0c7
4
1.1k
AIで楽になるはずが、なぜ疲れる?
kinopeee
0
140
人依存からAIネイティブの体制へ:バックエンド開発の裏側【SORACOM Discovery 2026】
soracom
PRO
0
130
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
320
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
600
AI驚き屋発見器
yama3133
1
380
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
310
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
200
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
1.6k
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
3
1.7k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
The Cult of Friendly URLs
andyhume
79
7k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
420
Marketing to machines
jonoalderson
1
5.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
260
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
330
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
250
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
600
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
サービス成長と共に 肥大化するモノレポ、 長くなるCI時間 @kohbis SRE観点での技術負債 懺悔会 2024
About Me Kohei SUGIMOTO 株式会社MIXI 2022/04 ~『家族アルバム みてね』 SRE X/GitHub
: @kohbis
Agenda 1. Introduction 2. 『家族アルバム みてね』のリポジトリ構成 3. サービス成長に伴うモノレポの課題 4. CI時間の増加の原因
5. 改善のためにやったこと 6. まとめ
『家族アルバム みてね』とは スマホで撮ったお子さまの写真・動画を家族で共有し コミュニケーションして楽しむ家族アルバムサービス 「世界中の家族の”こころのインフラ”を作る」 • 2015年4月リリース • 現在7言語・175の国と地域でサービスを提供 •
2023年11月に利用者数が2,000万人を突破 ※1 ※1 iOS・Android™ アプリ登録者数、ブラウザ版登録者数の合計
『家族アルバム みてね』の リポジトリ構成
『家族アルバム みてね』のリポジトリ構成 今回はサーバー側のみ • ほとんどの機能が巨大なモノリシックリ ポジトリに実装されている • いくつかサブシステムが切り出されたリ ポジトリもある (基本的に)Ruby
on Rails CI環境は • 主にCircleCI • 新規ではGitHub Actions API Web Task Worker 海外 配送 画像 解析 1秒 動画 DVD etc.
サービス成長に伴うモノレポの課題
サービス成長に伴うモノレポの課題 サービス成長 → 機能の追加 → リポジトリの肥大化 • 依存関係の複雑化 ◦ 変更の影響範囲調査、エラー特定の難化
• コードベースの管理難易度の増加 ◦ 新たな開発者のキャッチアップ負荷 etc. • CI時間の増加 今回はこちらの話 ◦ (後述)
CI時間の増加の影響 Four Keys ソフトウェア開発チームのパフォーマンスを示す 4 つの指標 • デプロイの頻度 … 組織による正常な本番環境へのリリースの頻度
• 変更のリードタイム … commit から本番環境稼働までの所要時間 • 変更障害率 … デプロイが原因で本番環境で障害が発生する割合(%) • サービス復元時間 … 組織が本番環境での障害から回復するのにかかる時間 ref: https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance CI実行リソースの従量課金も増加
CI時間の増加の原因
CI時間の増加の原因 • リポジトリサイズの肥大化 → チェックアウト時間の増加 • 使用するライブラリの増加 → インストール時間の増加 •
機能、コードの増加 → テスト実行時間の増加 • コンテナイメージサイズの増加 → イメージのPull/Build/Push時間の増加 『家族アルバム みてね』のモノレポにおけるCI時間(2024/03現在) • Rspecのテスト数 … 約23,000 • CircleCI(並列数: 32) • CI実行時間 … 約11分
改善のためにやったこと
やったこと • (ライブラリのキャッシュ設定は有効) • CI用イメージ(ECR)を東京リージョンからバージニア北部リージョンに移行 > AWS ECR イメージを使用する場合は、us-east-1 リージョンを使用することをお勧めします。
CircleCI のジョブ 実行インフラストラクチャは us-east-1 リージョンにあるので、同じリージョンにイメージを配置すると、イメー ジのダウンロードにかかる時間が短縮されます。 ref: https://circleci.com/docs/ja/using-docker/#docker-image-best-practices → イメージ取得時間を1/3に短縮(ECRのコスト減にも) • 静的コンテンツの取得元を東京リージョンからバージニア北部リージョンに移行 → DL時間を1/2に短縮(S3のコスト減にも) • 不要なチェックアウトを削除(Commit Hash値を取得するためだけ、など) → 約1分間の短縮
やった/やろうとしたけどだめだったこと • CircleCIのマシンサイズと並列数の調整 ◦ サイズを小さくしてジョブの並列数をあげる → リソースが足りずテストが終わらなくなってしまう ◦ サイズを大きくしてジョブごとのテストを並列実行(paralles testsなど)
→ 多少早くなるがリソース時間にかかるコストとのバランスが悪い • CircleCIでソースコードのキャッシュ → リポジトリサイズが大きいためsave/restoreに時間がかかってしまう • 同時実行数の制限を緩和するためDependabotによるPR起票時間を深夜帯にする → 大量のPRが同時に起票されCircleCIの同時実行数制限に達してしまう
やった/やろうとしたけどだめだったこと • GitHub Actionsの検証 ◦ 実行時間はCircleCIと同等 ◦ Initialize containersステップの実行時間が安定しない ref:
https://github.com/orgs/community/discussions/25975 → 変更のリードタイムが長期化してしまう • GitHub Actions Self-hosted Runnersの検証 ◦ ノード起動済みの場合、実行時間はCircleCIと同等 ◦ ノードスケールを伴う場合、実行時間が安定しない ※ CircleCIにもSelf-hosted Runnerがあるが未検証 ref: https://circleci.com/docs/runner-overview/
(おまけ)やれてないこと • Dockerイメージサイズの削減 • ソースコードのチェックアウトをShallow Cloneで行う ◦ CircleCIのIdeasでは提案されている ref: https://circleci.canny.io/cloud-feature-requests/p/allow-for-shallow-clone-command-in-20
• CircleCIで動かす必要のないものはGitHub Actionsへ移行 ◦ 開発者はGitHub Actionsの方が馴染みがある ◦ GitHub Actions Self-hosted Runnersも有効活用していきたい • テストの見直し ◦ 不要なテストやイテレーションがないか ◦ 修正内容によって必要なテストのみにできないか ◦ Flaky Testの撲滅、影響緩和
まとめ
まとめ • サービス成長にともなってモノレポが肥大化し、CI時間の増加などの問題が発生する • CI時間増加の要因は、大量のテストケースやコンテナイメージのビルド時間増加など さまざま • 改善策はたくさんあるが、自分のプロジェクトで効果があるかは要検証 ◦ 並列化、キャッシュ戦略、リソース最適化など
• CIのパイプライン環境の改善ではどこかで限界がくる ◦ (おそらく)行き着くところはテストの見直し 「パフォーマンス最大化できなくてごめんなさい」 「すぐに価値を提供できなくてごめんなさい」
None